package org.example.config;

import dev.langchain4j.memory.chat.ChatMemoryProvider;
import dev.langchain4j.memory.chat.MessageWindowChatMemory;
import dev.langchain4j.store.memory.chat.InMemoryChatMemoryStore;
import org.example.chatmemory.PersistentChatMemoryStore;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 配置类，用于配置不同的聊天记忆提供者
 * 提供基于内存和MySQL的两种聊天记忆存储方式
 */
@Configuration
public class SeparateAssistantConfig {

    /**
     * 创建基于内存存储的聊天记忆提供者Bean
     * 该提供者使用内存存储聊天记录，适用于临时会话场景
     * Bean名称默认为方法名：chatMemoryProvider
     * @return ChatMemoryProvider 聊天记忆提供者实例
     */
    @Bean
    ChatMemoryProvider chatMemoryProvider(){
        // 构建消息窗口聊天记忆，使用内存存储，最大保存10条消息
        return memoryId -> MessageWindowChatMemory.builder()
                // 设置ID(会话隔离)
                .id(memoryId)
                // 设置持久化策略(不设置时，默认使用的也是内存存储)
                .chatMemoryStore( new InMemoryChatMemoryStore())
                // 设置最大保存消息数
                .maxMessages(10).build();
    }

    /**
     * 创建基于MySQL存储的聊天记忆提供者Bean
     * 该提供者使用持久化存储聊天记录，适用于需要长期保存会话历史的场景
     * Bean名称默认为方法名：chatMemoryMySqLProvider
     * @return ChatMemoryProvider 聊天记忆提供者实例
     */
    @Bean
    ChatMemoryProvider chatMemoryMySqLProvider(){
        // 构建消息窗口聊天记忆，使用MySQL持久化存储，最大保存10条消息
        return memoryId -> MessageWindowChatMemory.builder()
                // 设置ID(会话隔离)
                .id(memoryId)
                // 设置持久化策略Mysql
                .chatMemoryStore( new PersistentChatMemoryStore())
                // 设置最大保存消息数
                .maxMessages(20).build();
    }

}
